1 학습 목표와 로드맵

  • tidy 시계열 구조(tsibble)와 기본 시각화(시간 플롯) 이해
  • 추세·계절·순환 패턴 파악 및 계절/하위시계열 플롯 활용
  • 산점도/시차도/자기상관으로 의존 구조 진단
  • 백색잡음 개념과 잔차 진단의 기준 정립

2 tsibble 객체 (tidy 시계열 구조)

2.1 이론 요약

  • tsibble은 index(시간축)와 key(개체 식별자)를 명시한 tidy 시계열 데이터 구조이다.
  • tsibblefeasts(진단/변환) → fable(모형/예측)로 이어지는 tidyverts 워크플로의 출발점이다.
  • 중복/결측 시점 처리, 간격(interval) 체크 등 데이터 품질을 엄격히 관리해야 한다.
global_economy
  • global_economy는 1960년부터 2017년까지 셰계은행에서 추출한 세계 각국의 GDP, 물가, 수입/수출 등을 나타내는 자료임
tourism
  • 1998년 1분기부터 2016년 4분기까지 1박이상 호주의 인바운드 관광객 수를 나타내는 자료임

  • tsibble이란 객체는 R에서 다중 시계열을 저장하고 이를 제어할 수 있는 것으로 볼 수 있음

  • tsibble은 다음 형식을 가지고 있음:

    • An index(인덱스): 관측치의 시간 정보
    • Measured variable(s)(측정 변수): 관심 있는 수치(값)
    • Key variable(s): 각 시계열을 구분하는 고유 식별자
  • tsibbletidyverse함수를 이용하여 제어한다.

2.2 tsibble 인덱스

2.2.1 예제

mydata <- tsibble(
  year = 2015:2019,
  y = c(123, 39, 78, 52, 110),
  index = year
)
mydata
mydata <- tibble(
  year = 2015:2019,
  y = c(123, 39, 78, 52, 110)
) |>
  as_tsibble(index = year)
mydata
  • 일년에 한 번 이상 관측되는 데이터에 관해서는 인덱스의 시간계급(time class) 함수를 사용해야만 한다.
z
z |>
  mutate(Month = yearmonth(Month)) |>
  as_tsibble(index = Month)
  • 보통 시간 인덱스 변수는 다음과 같은 함수를 이용해서 생성한다.
Frequency Function
Quarterly yearquarter()
Monthly yearmonth()
Weekly yearweek()
Daily as_date(), ymd()
Sub-daily as_datetime()

2.2.2 호주의 수감자 통계

  • csv파일을 읽고 이를 tibble로 변환
prison <- readr::read_csv("data/prison_population.csv")
## Rows: 3072 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (4): state, gender, legal, indigenous
## dbl  (1): count
## date (1): date
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
prison <- readr::read_csv("data/prison_population.csv") |>
  mutate(Quarter = yearquarter(date))
## Rows: 3072 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (4): state, gender, legal, indigenous
## dbl  (1): count
## date (1): date
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
prison <- readr::read_csv("data/prison_population.csv") |>
  mutate(Quarter = yearquarter(date)) |>
  select(-date)
## Rows: 3072 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (4): state, gender, legal, indigenous
## dbl  (1): count
## date (1): date
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
prison <- readr::read_csv("data/prison_population.csv") |>
  mutate(Quarter = yearquarter(date)) |>
  select(-date) |>
  as_tsibble(
    index = Quarter,
    key = c(state, gender, legal, indigenous)
  )
## Rows: 3072 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (4): state, gender, legal, indigenous
## dbl  (1): count
## date (1): date
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

2.2.3 호주 의약품 급여제도

  • 호주 의약품 급여제도(PBS)는 호주 정부의 대표적인 의약품 보조금 제도이다.
    • 많은 약국에서 구매되는 의약품은 현대 의약품에 대한 보다 공평한 접근을 위해 정부 보조를 받는다.
    • 정부 지출 규모는 구매된 의약품의 수량과 유형에 의해 결정된다. 현재는 국내총생산(GDP)의 약 1% 수준이다.
    • 총비용은 의약품 사용량 예측에 근거해 예산으로 편성된다.
    • 비용은 약물 유형(ATC1 × 15 / ATC2 84), 감면 범주(× 2), 환자 유형(× 2)으로 세분되며, 결과적으로 \(84\times 2\times 2=r 84*2*2\)개의 시계열이 생성된다.
PBS
  • filter()함수를 이용하여 원하는 열을 선택할 수 있다.
PBS |>
  filter(ATC2 == "A10")
  • select()함수를 이용하여 원하는 열을 선택할 수 있다.
PBS |>
  filter(ATC2 == "A10") |>
  select(Month, Concession, Type, Cost)
  • summarise()함수를 이용하여 주요 변수의 요약통계량을 구할 수 있다.
PBS |>
  filter(ATC2 == "A10") |>
  select(Month, Concession, Type, Cost) |>
  summarise(TotalC = sum(Cost))
  • mutate() 함수를 이용해 새로운 변수를 만들어 낼 수도 있다.
PBS |>
  filter(ATC2 == "A10") |>
  select(Month, Concession, Type, Cost) |>
  summarise(TotalC = sum(Cost)) |>
  mutate(Cost = TotalC / 1e6) -> a10

3 시계열 시각화(기본)

3.1 이론 요약

  • 시계열 도표는는 시간에 따른 수준·변화를 가장 직관적으로 보여준다.
  • autoplot()/ggplot2를 활용하면 여러 시계열을 겹쳐 비교하거나, 변환(로그/차분) 전후를 손쉽게 시각화할 수 있다.
  • 기간 선택, 스무딩, 강조(색/선형) 등으로 메시지를 명확하게 전달하여보자.

3.2 R 그래픽

  • Plot은 데이터의 다음과 같은 것을 보여준다
    • 패턴;
    • 이상 관측치;
    • 시간에 따른 변화;
    • 변수들간의 관계.

3.3 시계열 도표

  • 호주 항생제 판매액 도표
a10 |>
  autoplot(Cost) + 
  labs(y = "$ (millions)", title = "호주 항생제 판매액")

  • Ansett 항공사 승객 데이터
ansett |>
  autoplot(Passengers)

ansett |>
  filter(Class == "Economy") |>
  autoplot(Passengers)

ansett |>
  filter(Airports == "MEL-SYD") |>
  autoplot(Passengers)

4 시계열 패턴(추세·계절·순환)

4.1 이론 요약

  • 추세(장기 변화), 계절성(주기적 변동), 순환(경기적 변동)을 분리해보면 원인과 해석이 쉬워진다.
  • 분해 기법: STL(Loess), X-13, SEATS 등. 실습에서는 STL을 주로 사용한다.
  • 계절성이 강하면 로그 변환이나 계절 조정을 먼저 고려한다.

4.2 시계열의 구성요소

추세세
자료에 장기적인 증가 또는 감소 경향이 존재할 때의 패턴.
  • 예: \(T_t\)를 추세라 하면, 대표적 표현은 선형/다항/스무딩 추세

    \[ T_t = \beta_0 + \beta_1 t \quad\text{(선형)},\qquad T_t = \sum_{j=0}^p \beta_j t^j \quad\text{(다항)} \]

    또는 로컬 레벨/로컬 선형(상태공간) 등 확률적 추세.

계절요인
시계열이 계절 요인(분기/월/요일 등)에 의해 주기적 영향을 받을 때의 패턴.
  • 계절 주기 \(s\)에 대해 완전 주기성:

    \[ S_{t+s} = S_t,\qquad \sum_{j=1}^{s} S_{t-j+1} = 0 \;(\text{식별 제약, 가산형}) \]

  • 더미로 표현: \(S_t = \sum_{j=1}^{s} \gamma_j D_{j,t},\ \sum_{j=1}^s \gamma_j = 0\)

  • 조화형으로도 표현 가능:

    \[ S_t = \sum_{k=1}^{\lfloor s/2\rfloor} \left[a_k \cos\!\left(\tfrac{2\pi kt}{s}\right)+ b_k \sin\!\left(\tfrac{2\pi kt}{s}\right)\right] \]

순환요인
고정된 주기가 아닌(변동하는 길이) 상승·하락이 나타나는 패턴. 보통 2년 이상 지속하는 것.
  • 감쇠 진동을 갖는 AR(2)로 근사 가능(복소근):

    \[ C_t = 2\rho\cos(\omega)\,C_{t-1} - \rho^2 C_{t-2} + \varepsilon_t,\qquad \text{평균 주기} \approx \frac{2\pi}{\omega},\ \ 0<\rho<1 \]


  • 시계열의 분해

가장 흔한 분해방법은 다음과 같다.

  • 가산형(additive):

    \[ y_t = T_t + S_t + C_t + E_t \]

  • 승수형(multiplicative):

    \[ y_t = T_t \times S_t \times C_t \times \varepsilon_t \]

    (로그 변환 \(\tilde y_t=\log y_t\)을 쓰면 가산형으로 변환되어 추정이 용이)

여기서 \(E_t\) 또는 \(\varepsilon_t\)는 평균 0, 상수분산을 갖는 교란(통상 백색잡음 가정).


4.3 계절성과 순환의 차이

  • 주기 길이

    • 계절성: 고정 길이 \(s\) (예: 월별 \(s=12\), 분기별 \(s=4\))
    • 순환: 가변 길이(경기 국면에 따라 길이/모양이 달라짐)
  • 평균 길이

    • 순환의 평균 길이는 계절성의 길이보다 더 김(보통 2년 이상)
  • 변동 폭

    • 순환의 진폭은 계절성보다 더 가변적(크게/작게 출렁임)
  • 변환/진단

    • 계절성: \(\nabla_s y_t\)체계적으로 제거 가능, ACF에서 **\(s,2s,\dots\)**의 뚜렷한 스파이크
    • 순환: 고정 주기 제거가 어려워 AR(2) 감쇠 진동, HP/기타 필터, 저주파 스펙트럼으로 접근 (ACF가 사인파 형태로 서서히 감쇠)

스펙트럼 관점 * 계절성은 계절 주파수 \(\tfrac{2\pi k}{s}\)에서 예리한 피크(선 스펙트럼)가 나타나는 반면, * 순환은 저주파 대역에서 완만한 능선(ridge) 형태로 에너지가 분포하는 경향.


4.3.1 실무 팁

  • 계절성이 강하면 로그 변환 + 계절차분이나 STL 분해로 먼저 구조를 분리한 뒤 모형화.
  • 순환을 모형화할 땐 AR(2)/ARIMA의 복소근(감쇠 진동)이나 상태공간(로컬 레벨+주기 성분), 또는 HP 필터 등으로 장단기를 구분해 해석.
  • 잔차는 백색잡음에 근접해야 하며, 계절/순환 신호가 잔차에 남지 않도록 ACF/PACF·Ljung–Box로 점검.

4.3.2 예제

  • 호주 전력생산량량
aus_production |>
  filter(year(Quarter) >= 1980) |>
  autoplot(Electricity) +
  labs(y = "GWh", title = "호주 전력생산량량")

  • 호주 벽돌생산량
aus_production |>
  autoplot(Bricks) +
  labs(y = "백만개개", title = "호주 벽돌 생산량")

  • 미국 소매업 취업자수
us_employment |>
  filter(Title == "Retail Trade", year(Month) >= 1980) |>
  autoplot(Employed / 1e3) +
  labs(y = "백만명", title = "미국 소매업 취업자수")

  • 아마존 주식 종가
gafa_stock |>
  filter(Symbol == "AMZN", year(Date) >= 2018) |>
  autoplot(Close) +
  labs(y = "미 달러", title = "아마존 주식 종가")

  • 캐나다 연간 여우 포획량량
pelt |>
  autoplot(Lynx) +
  labs(y = "마리", title = "캐나다 연간 여우우 포획량")

4.4 계절요인(Seasonal)인가, 순환요인인(Cyclic)인가?

계절성과 순환의 차이점

  • 주기 길이: 계절 패턴고정 길이(예: 분기 s=4, 월 s=12), 순환 패턴가변 길이.
  • 평균 길이: 순환의 평균 길이는 계절성의 길이보다 더 김(보통 2년 이상 지속).
  • 진폭(크기) 변동성: 순환의 진폭은 계절성보다 더 변동적.

💡 핵심 계절 자료에서는 **정점(peak)**과 **저점(trough)**의 시점이 예측 가능하지만, 순환은 장기적으로 시점이 불확실


4.4.1 이론 보충

1) 계절성의 정의와 성질

  • 주기 \(s\)에 대해 완전 주기성:

    \[ S_{t+s}=S_t,\qquad \sum_{j=1}^{s} S_{t-j+1}=0 \quad(\text{가산형 식별 제약}) \]

  • 계절차분 \(\nabla_s=(1-B^s)\)로 제거 가능: \(\ \nabla_s y_t = y_t - y_{t-s}\).

  • ACF 서명: 시차 \(s, 2s, 3s,\dots\)에서 뚜렷한 스파이크.

  • 스펙트럼: \(\tfrac{2\pi k}{s}\) (정수 \(k\))에서 선형(날카로운) 피크.

2) 순환의 정의와 근사 표현

  • 고정 주기가 아님: 경기 국면에 따라 길이·진폭이 변함(보통 2년 이상).

  • **감쇠 진동 AR(2)**로 근사(복소근 존재):

    \[ C_t = 2\rho\cos(\omega)\,C_{t-1} - \rho^2 C_{t-2} + \varepsilon_t,\quad 0<\rho<1, \]

    \[ \text{평균 주기} \approx \frac{2\pi}{\omega},\ \ \text{진폭은 } \rho^h \text{로 감쇠} \]

  • ACF 서명: 사인파처럼 진동하며 서서히 감쇠(damped sinusoid).

  • 스펙트럼: 저주파 대역에서 넓은 봉우리(능선) 형태.

3) 분해 모형과 실무 팁

  • 가산형: \(y_t = T_t + S_t + C_t + E_t\), 승수형: \(y_t = T_t \times S_t \times C_t \times \varepsilon_t\). (로그 변환 \(\log y_t\)은 승수형을 가산형으로 바꿔 추정 용이)
  • 계절성 강함STL/X-13로 계절 제거 또는 \(\nabla_s\) 적용 후 모형화.
  • 순환은 고정 주기가 아니므로 AR(2)/ARIMA 복소근, HP/밴드패스 필터나 **상태공간(주기 성분)**로 접근.

4) 식별 체크리스트

  • 계절성

    • \(\nabla_s y_t\) 적용 시 계절 패턴이 사라짐
    • ACF가 \(s,2s,\dots\)에 반복 스파이크
    • 더미 계절 회귀의 F-검정 유의
  • 순환

    • ACF가 진동+감쇠 형태
    • 평균 주기 길이가 \(s\)보다 길고 시점 변동
    • 스펙트럼이 저주파에 넓게 분포

5) 예측 관점

  • 계절: 정점·저점의 캘린더 시점이 예측 가능 → s-naive/계절 ETS/ARIMA가 강력한 기준선.
  • 순환: 시점·진폭 불확실 → 장기 예측 불확실성 큼, 시나리오/구간 예측 강조.

5 계절 도표(Seasonal plots)

5.1 이론 요약

  • 계절 도표는 같은 달(또는 분기)끼리 묶어 계절 패턴을 한눈에 보여줌

  • 계절성의 위상(peak/low), 변동성 변화(분산 상승/하락)를 쉽게 파악

  • a10 시계열

a10 |> 
  autoplot(Cost)

5.2 시계열 도표

a10 |> gg_season(Cost, labels = "both") +
  labs(y = "$ million", title = "Seasonal plot: antidiabetic drug sales")

  • 데이터가 관측된 각 “season”(이 경우 월)별로 그린 그래프.
  • 일반적인 시계열 플롯과 비슷하지만, 각 season의 데이터가 서로 겹쳐 보이도록 배치된다.
  • 기저 계절 패턴을 더 선명하게 보여 주며, 계절 패턴에서 크게 벗어나는 구간도 쉽게 식별할 수 있다.
  • R에서는: gg_season()

5.3 예제: 분기별 호주 맥주 생산량

beer <- aus_production |> 
   select(Quarter, Beer) |> filter(year(Quarter) >= 1992)
beer |> autoplot(Beer) + 
  labs(title = "호주 맥주 생산량", y = "메가리터") 

beer |> autoplot(Beer) + geom_point() + 
  labs(title = "호주 맥주 생산량", y = "메가리터")  

beer |> gg_season(Beer, labels = "right")

5.4 다양한 계절 효과 도표

vic_elec
vic_elec |> autoplot()
## Plot variable not specified, automatically selected `.vars = Demand`

vic_elec |> gg_season(Demand)

vic_elec |> gg_season(Demand, period = "week")

vic_elec |> gg_season(Demand, period = "day")

6 Subseries 도표

6.1 이론 요약

  • 각 계절(예: 1월, 2월…)의 부분 시계열을 따로 그려 비교.
  • 월별 평균·분산·추세 차이를 시각적으로 확인하고, 계절 더미 또는 가변 계절성의 필요성을 점검.

6.2 계절표 subseries 도표

  • 항생제 매출
a10 |>
  gg_subseries(Cost) +
  labs(y = "백만 달러", title = "Subseries 도표: 항생제 매출")

  • 각 season(월·분기 등)별 데이터를 모아, season별로 분리된 시계열로 한 그림에 나타낸다.
  • 기저 계절 패턴을 선명하게 보여 주며, 시간이 지나면서 계절성이 어떻게 변하는지도 시각화할 수 있다.
  • R에서는: gg_subseries()

6.3 예제: 분기별 호주 맥주 생산량

beer <- aus_production |>
  select(Quarter, Beer) |>
  filter(year(Quarter) >= 1992)
beer |> autoplot(Beer)

beer |> gg_subseries(Beer)

6.4 예제: 호주의 휴일과 관광업

holidays <- tourism |>
  filter(Purpose == "Holiday") |>
  group_by(State) |>
  summarise(Trips = sum(Trips))
holidays |> autoplot(Trips) +
  labs(y = "천 번", title = "호주의 국내휴가")

6.5 계절성 도표

holidays |> gg_season(Trips) + 
   facet_wrap(vars(State), nrow = 2, scales = "free_y")+
   labs(y = "천 번", title = "호주의 국내휴가")

holidays |>
  gg_subseries(Trips) +
  labs(y = "천 번", title = "호주의 국내휴가")

7 산점도(시계열과 설명변수)

7.1 이론 요약

  • 두 변수의 관계(선형/비선형/이상치)를 탐색
  • 시계열 데이터라도 동일 시점의 교차단면적 관계를 볼 때 산점도가 유용함
  • 상관과 인과는 다릅니다. 시차 효과는 다음 절의 lag plot/ACF에서 확인함

7.2 예제: 호주 빅토리아주 전기수요

vic_elec_day_type <- vic_elec |> 
   filter(year(Time) == 2014) |> 
   mutate(Day_Type = case_when(
      Holiday ~ "Holiday",
      wday(Date) %in% 2:6 ~ "Weekday",
      TRUE ~ "Weekend"))
vic_elec_day_type

7.2.1 시계열 도표

7.2.2 산포도

vic_elec_day_type |> 
  ggplot(aes(x = Temperature, y = Demand)) +
  geom_point() + 
   labs(x = "온도(섭씨)", y = "전기수요 (GW)")

vic_elec_day_type |> 
  ggplot(aes(x = Temperature, y = Demand, colour = Day_Type)) +
  geom_point() + 
   labs(x = "온도(섭씨)", y = "전기수요 (GW)")

7.3 상관계수

두 변수(\(y\) and \(x\)) 사이의 선형관계의 정도를 측정 .

  • \(r=\frac{\sum_{t=1}^T(y_t-\bar{y})(x_t-\bar{x})}{\sqrt{\sum_{t=1}^T(y_t-\bar{y})^2} \sqrt{\sum_{t=1}^T(x_t-\bar{x})^2}}\)

7.3.1 예제: 미국 소비지출량

us_change |> GGally::ggpairs(columns = 2:6)

8 자기상관(ACF/PACF)

8.1 시차 관계

  • lag plot은 \(y_t\)\(y_{t-k}\)의 관계를 그려 자기상관 구조를 직관적으로 보여준다.
  • 선형성/비선형성, 군집/이상값 등을 시각적으로 파악하고, AR(p) 차수 가늠에 도움이 된다.

8.1.1 예제: 맥주 생산

new_production <- aus_production |>
  filter(year(Quarter) >= 1992)
new_production
new_production |> gg_lag(Beer, geom = "point")

  • 각각의 그래프는 각기 다른 \(k\) 값에 대한 \(y_{t-k}\)\(y_t\)의 관계를 보여준다.
new_production |> gg_lag(Beer)

8.2 자기상관(ACF/PACF)

  • ACF는 전체 자기상관을, PACF는 중간 시차 효과를 제거한 순수한 자기상관을 보여준다.
  • AR 모형 후보는 PACF 절단, MA 모형 후보는 ACF 절단 패턴을 보이는 경향이 있다(경험칙).
  • 정상성 가정 하에서 해석하며, 비정상(추세/계절)일 땐 변환/차분 후 확인한한다.

8.2.1 예제: 맥주 생산

new_production |> gg_lag(Beer, geom = "point")

  • 각각의 그래프는 각기 다른 \(k\) 값에 대한 \(y_{t-k}\)\(y_t\)의 관계를 보여준다.
  • 자기상관이란 이 산포도에서 보이는 상관관계를 나타낸다.

8.2.2 자기상관(Autocorrelation) 정의와 표기

표본 자기공분산(lag \(k\))을 \(c_k\), 표본 자기상관\(r_k\)라 하자. 표본평균 \(\bar y=\frac1T\sum_{t=1}^T y_t\)일 때,

\[ c_k \;=\; \frac{1}{T}\sum_{t=k+1}^T (y_t-\bar{y})(y_{t-k}-\bar{y}), \qquad r_k \;=\; \frac{c_k}{c_0}. \]

참고: 일부 교과서/소프트웨어는 \(c_k\) 분모를 \(T-k\)로 두는 불편(unbiased) 정의를 쓰기도 한다(위 식은 bias 버전). 핵심 개념과 해석은 동일하다.

  • \(r_1\): 연속 관측치 간(한 시점 차이) 선형 관련성
  • \(r_2\): 두 시점 차이(두 기간 간) 관련성
  • 일반적으로 \(r_k\)\(y_t\)\(y_{t-k}\)표본 상관계수와 거의 같다(정의가 사실상 동일).

8.2.3 기본 성질 & 해석 기준

  • \(-1 \le r_k \le 1\).
  • 정상성(weak stationarity)이 아닐 경우(추세·계절성 존재) ACF가 인위적으로 크게 나올 수 있다 → 차분/계절차분 또는 분해 후 분석 권장.
  • 백색잡음이라면 대부분의 \(r_k\)0 부근이며, 대략 \(\pm 1.96/\sqrt{T}\) 안에 들 것(근사적인 유의대).

8.2.4 예시: 맥주 생산(분기, 계절성) 자료

첫 9개 시차의 자기상관을 계산:

new_production |> ACF(Beer, lag_max = 9)

시각화(상관도표, correlogram):

new_production |> ACF(Beer, lag_max = 9) |> autoplot()

  • 용어

  • 여러 시차의 \(r_k\)들을 모은 벡터 \((r_1,r_2,\dots)\)ACF(autocorrelation function)라 한다.

  • 이를 막대그래프로 그린 것을 상관도표(correlogram) 라고 한다.


8.2.5 전체 시차 범위에서의 ACF

new_production |> ACF(Beer) |> autoplot()

  • \(r_4\)가 다른 시차보다 큰 이유: 계절 패턴(분기 주기 \(s=4\)) 때문. **정점(peak)**과 **저점(trough)**이 약 4분기 간격으로 반복.
  • \(r_2\)가 상대적으로 **음(−)**인 이유: 정점과 저점이 반주기(2분기) 간격으로 어긋나기 때문.

8.2.6 이론 보충

8.2.6.1 계절성과 ACF의 서명

  • 계절 주기 \(s\)가 있으면 ACF가 \(k=s, 2s, 3s,\dots\)에서 반복적인 큰 스파이크를 보인다.
  • 계절성 제거는 계절차분 \(\nabla_s y_t = y_t-y_{t-s}\) 또는 STL/X-13 계절조정을 활용.

8.2.6.2 순환(비고정 주기)과 ACF의 서명

  • 경기순환처럼 주기가 변동하는 경우, ACF는 사인파처럼 진동하며 서서히 감쇠(감쇠 진동)하는 모양이 자주 나타난다(AR(2) 복소근 구조).

8.2.6.3 ACF vs. PACF

  • ACF: 전체 자기상관(중간 시차 효과 포함)

  • PACF: 부분 자기상관(중간 시차를 통제한 순수 효과)

    • 경험칙: AR(\(p\))는 PACF가 \(p\)에서 절단(cutoff), MA(\(q\))는 ACF가 \(q\)에서 절단되는 경향.

8.2.6.4 유의성 판단(근사)

  • 표본 크기 \(T\)에서, 백색잡음 가정하 유의대 \(\pm 1.96/\sqrt{T}\)를 참고(엄밀 검정은 Ljung–Box 등 사용).
  • 다중시차 동시검정에는 Ljung–Box 검정이 적합: 잔차의 백색잡음 여부 판단.

8.2.7 실무 팁

  • 추세/계절성 존재 시 그대로 ACF 해석 금지 → 로그/차분/계절차분 후 확인.
  • 모형 적합 후 잔차 ACF가 유의하지 않게(대부분 유의대 내) 만들어야 양호한 모형.
  • 계절성이 강한 분기 자료는 \(k=4,8,12,\dots\)에서 스파이크가 자연스럽다. 이 신호가 잔차에 남으면 계절 항(SARIMA, ETS의 계절 성분 등)을 보강.

8.3 자기상관함수 (Autocorrelation functions)

8.4 ACF에서의 추세와 계절성 (Trend & Seasonality in ACF)

  • 추세가 있으면 작은 시차의 자기상관이 크고 양수로 나타나는 경향이 있다.
  • 계절성이 있으면 계절 주기의 배수(예: 분기 자료면 \(k=4,8,12,\dots\))에서 자기상관이 크게 나타난다.
  • 추세와 계절성이 동시에 있으면 두 효과가 겹쳐서 보인다(작은 시차에서 큰 양의 상관 + 계절 시차에서 큰 스파이크).

8.4.1 이론 보충

1) 왜 추세가 ACF를 크게 만들까?

  • 결정적 추세 \(y_t = \beta_0 + \beta_1 t + u_t\)가 있으면, 시간 \(t\)가 커질수록 평균이 달라져 **평균불변(정상성)**이 깨진다. 이때 원자료의 ACF는 추세 자체에 의해 양(+)의 상관이 생겨 과대평가된다.
  • 확률적 추세(랜덤워크) \(y_t = y_{t-1} + \varepsilon_t\)비정상이라 원자료의 ACF가 천천히 감쇠하며 1에 가까운 값을 보인다.

2) 추세 제거(차분) 후 ACF 해석

  • 일반 차분: \(\nabla y_t = y_t - y_{t-1}\) → 선형 추세 제거에 효과적.
  • 랜덤워크의 경우 \(\nabla y_t = \varepsilon_t\)가 되어 차분 후 ACF는 거의 0(백색잡음)이어야 한다.
  • 차분 후의 ACF/PACF를 가지고 ARMA 차수 선택을 한다(정상성 가정하 해석).

3) 계절성의 ACF 서명과 제거

  • 계절 주기 \(s\)가 있으면 ACF에서 \(k=s, 2s, 3s,\dots\)반복적인 스파이크가 나타난다.
  • 계절 차분: \(\nabla_s y_t = y_t - y_{t-s}\)로 계절 성분을 제거한다.
  • 추세와 계절이 모두 있으면 복합 차분을 적용: \(\nabla^d \nabla_s^D y_t\). (보통 \(d\in\{0,1\}\), \(D\in\{0,1\}\))
  • 모델링 관점에선 SARIMA 혹은 \(\text{ARIMA}(p,d,q)(P,D,Q)_s\)로 표현한다.

4) 진단·실무 팁

  • 원자료 ACF에서 작은 시차의 큰 양(+) 상관은 추세의 신호, 계절 시차 스파이크는 계절성의 신호다.
  • 차분(및/또는 계절조정) 후의 ACF/PACF를 기준으로 모형 차수를 정한다.
  • 표본 크기 \(T\)에서 백색잡음 가정의 유의대는 대략 \(\pm 1.96/\sqrt{T}\). (여러 시차 동시 검정은 Ljung–Box 권장)

8.4.2 간단 R 실습 예시

# 추세·계절성 진단과 차분 예시 (feasts/tidyverts)
library(tsibble)
library(feasts)
library(dplyr)

# 예: tsibble 객체 'x'와 변수 'y'가 있다고 가정
x |> ACF(y) |> autoplot()  # 원자료 ACF

# 1차 차분 후
x |> mutate(dy = difference(y)) |>
  ACF(dy) |> autoplot()

# 계절 차분(s=4) + 1차 차분 후
x |> mutate(dsy = difference(y, lag = 4),
            dsy1 = difference(dsy)) |>
  ACF(dsy1) |> autoplot()
  • 요약: 원자료 ACF로 추세/계절성의 존재를 가늠 → 적절한(계절)차분으로 정상화 → 차분 후 ACF/PACF로 ARMA/SARIMA 차수 선택.

8.4.3 예제: 미국 소매업 취업자수

retail <- us_employment |>
  filter(Title == "Retail Trade", year(Month) >= 1980)
retail |> autoplot(Employed)

retail |>
  ACF(Employed, lag_max = 48) |>
  autoplot()

8.4.4 예제: 구글 주가

google_2015 <- gafa_stock |>
  filter(Symbol == "GOOG", year(Date) == 2015) |>
  select(Date, Close)
google_2015
google_2015 |> autoplot(Close)

google_2015 |>
  ACF(Close, lag_max = 100)
google_2015 |>
  ACF(Close, lag_max = 100) |>
  autoplot()

9 백색잡음(White noise)

9.1 이론 요약

  • 백색잡음은 평균 0, 상수 분산, 자기상관이 0인 시계열.
  • 좋은 모형의 잔차는 백색잡음이어야 함(잔차 ACF에서 유의 자기상관이 없어야 함).
  • Ljung–Box 검정으로 잔차의 독립성(백색잡음 가설)을 점검

9.2 예제: 백색잡음(White noise)

set.seed(30)
wn <- tsibble(t = 1:50, y = rnorm(50), index = t)
autoplot(wn, y) + labs(title = "백색잡음 시계열 예시", x = "t", y = "y_t")

정의(이론)
백색잡음 \(\{y_t\}\)는 통상 다음을 가정함 \[ \mathbb{E}(y_t)=0,\qquad \mathrm{Var}(y_t)=\sigma^2\ \text{(상수)},\qquad \mathrm{Cov}(y_t,y_{t-k})=0\ \ (k\ne 0). \] 실무에서는 “시간에 따라 상관이 없고 평균 0, 분산이 일정”하면 백색잡음으로 보기도 함 (엄밀히는 독립성까지 요구하는 경우가 많음.)


9.3 백색잡음의 ACF

백색잡음의 표본 자기상관(처음 10개 시차)
\(r_{1}\) \(r_{2}\) \(r_{3}\) \(r_{4}\) \(r_{5}\) \(r_{6}\) \(r_{7}\) \(r_{8}\) \(r_{9}\) \(r_{10}\)
0.014 -0.163 0.163 -0.259 -0.198 0.064 -0.139 -0.032 0.199 -0.024
wn |>
  ACF(y) |>
  autoplot() +
  labs(title = "백색잡음의 ACF", x = "Lag", y = "ACF")

  • 백색잡음의 표본 자기상관은 각 시차에서 0에 가깝게 나타난다.
  • ACF 그림의 파란 실선은 보통 \(\pm 1.96/\sqrt{T}\) (근사 95% 유의한계)를 나타내며, 이 범위를 벗어나는 막대가 많다면 백색잡음이 아닐 가능성을 시사한다

표본분포(이론 보충)
백색잡음에서 \(r_k\)는 큰 표본에서 \[ r_k \ \overset{approx}{\sim}\ \mathcal{N}\!\left(0,\ \frac{1}{T}\right), \] 이므로 약 95%\(r_k\)\(\pm 1.96/\sqrt{T}\) 안에 들 것으로 기대함
여러 시차를 동시에 검정할 때는 Ljung–Box 검정을 활용

# Ljung-Box: 잔차의 백색잡음 여부 테스트(여기서는 자체 시계열)
Box.test(wn$y, lag = 10, type = "Ljung-Box", fitdf = 0)
## 
##  Box-Ljung test
## 
## data:  wn$y
## X-squared = 12.993, df = 10, p-value = 0.2241

9.4 예제: 호주 빅토리아주 돼지 도축수

pigs <- aus_livestock |>
  filter(State == "Victoria", Animal == "Pigs", year(Month) >= 2014)

autoplot(pigs, Count/1e3) +
  labs(y = "천 마리(Thousands)",
       title = "빅토리아주 월별 돼지 도축 수 (2014–2018)")

pigs |>
  ACF(Count) |>
  autoplot() +
  labs(title = "돼지 도축수의 ACF", x = "Lag(월)", y = "ACF")

  • 시계열 그림만으로는 명확한 패턴 식별이 어려울 수 있음.
  • ACF에서 시차 12(월별 자료의 계절주기)와 시차 2에서 유의한 자기상관이 보이면,
    이는 약한 계절성(연간 주기)반주기 근처의 상관을 시사함
  • 따라서 이 시계열은 백색잡음이 아니다.

모형화 힌트(이론 보충)
- 계절성이 보이면 계절 차분 \(\nabla_{12} y_t = y_t - y_{t-12}\) 또는 계절 모형화(SARIMA, ETS 계절 성분)를 고려
- 추세와 계절이 함께 있을 때는 \(\nabla^d \nabla_{12}^D y_t\)처럼 복합 차분을 적용해 정상화 후 ACF/PACF로 차수를 판단
- 백색잡음/잔차 진단에는 ACF/PACF와 함께 Ljung–Box 검정을 병행함